/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package app.Cliente;

import geral.pack.Carta;
import java.io.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Pedro
 */
public class Decodificador {

    private Controller control;
    private byte[] dado;
    

    public Decodificador(Controller control) {
        this.control = control;        
    }

    public void decodificar(byte[] mensagem, InetAddress address) {
        Carta msg = null;
        Object obj = ByteToObj(mensagem);
        if (obj instanceof Carta) {
            msg = (Carta) obj;            
            //------------------------------------------------------------------
            //Tipo:Resposta
            if (msg.getTipo().equalsIgnoreCase("resposta")) {
                dado = msg.getDado();
                String aux = new String(dado);
                if(aux.equalsIgnoreCase("sim")){
                    JOptionPane.showMessageDialog(null, "Cadastro Concluido");
                } else {
                    JOptionPane.showMessageDialog(null, "Erro no Cadastro");
                }
            }
            //------------------------------------------------------------------
            /*
             * Recebe uma mensagem com dado no formato: "nick#tipo"
             * aux[0] = nick; aux[1]=tipo.
             */
            if(msg.getTipo().equalsIgnoreCase("resposta loguin")){                
                dado = msg.getDado();
                String[] aux = new String(dado).split("#");
                if(aux[0].equalsIgnoreCase("sim")){
                    JOptionPane.showMessageDialog(null, "Loguin Efetuado!");
                    this.control.confirmaLoguin(true, aux[1]);
                }
            }
            //------------------------------------------------------------------
            /*
             * Recebe uma verificação de online!
             */
            if(msg.getTipo().equalsIgnoreCase("online")){
                try {
                    control.estouVivo();
                } catch (UnknownHostException ex) {
                    Logger.getLogger(Decodificador.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            //------------------------------------------------------------------
            /*
             * aux[0] = numero de clientes.
             */
            if(msg.getTipo().equalsIgnoreCase("lista on")){
                String[] aux = new String(dado).split("#");
                /*
                 * Colocar pra Adiionar num JList
                 */
                
            }
            //------------------------------------------------------------------
            //Recebeu uma mensagem de texto.
            if(msg.getTipo().equalsIgnoreCase("texto")){
                /*
                 * Setar GUI.
                 */
            }
        }
    }

    //Converte um Objeto serializavel para um Array de bytes.
    private byte[] ObjToByte(Object obj) {
        byte[] bytes = null;
        if (obj == null) {
            return null;
        }
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(obj);
            oos.flush();
            oos.close();
            bos.close();
            bytes = bos.toByteArray();
        } catch (IOException ex) {
            System.out.println("Erro de Serialização.");
        }
        return bytes;
    }

    //Converte um Objeto serializado para Object.
    private Object ByteToObj(byte[] bytes) {
        Object obj = null;
        try {
            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bis);
            obj = ois.readObject();
        } catch (IOException ex) {
            //TODO: Handle the exception
        } catch (ClassNotFoundException ex) {
            //TODO: Handle the exception
        }
        return obj;
    }
}
